package com.zero.cloud.filter;


import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.factory.AbstractNameValueGatewayFilterFactory;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;

/*
*   局部过滤器过滤
*       对 订单服务 单独进行过滤处理
* */
@Component   // 放入spring容器中
public class OrderFilter extends AbstractNameValueGatewayFilterFactory {


    @Override
    public GatewayFilter apply(NameValueConfig config) {
        return new GatewayFilter() {
            @Override
            public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
                // 获取过滤参数 args 的 name 和 value 属性
                String name = config.getName();    // 参数名
                String value = config.getValue();  // 参数值

                // 获取请求对象 request
                ServerHttpRequest request = exchange.getRequest();
                // 获取响应对象 response
                ServerHttpResponse response = exchange.getResponse();

                /*
                *   对请求进行校验、处理...如果不满足条件，直接响应，不放行
                * */
                System.out.println("订单服务 前置过滤器");


                // 放行
                return chain.filter(exchange).then(Mono.fromRunnable(()->{
                    /*
                     *   对响应结果进行处理
                     * */
                    System.out.println("订单服务 后置过滤器");
                }));
            }
        };
    }
}
